﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Ven_Metas_VendedorDAO
    {

        private AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();


        public IEnumerable<Object> lista(int id,string anio,String strTipoMeta) {

            IEnumerable<Object> list = new List<Object>();
           
              
                 if (strTipoMeta.ToUpper() == "IMPORTE")
                {
                    var q = from v in ContextoDeObjs.T_VEN_METAS_VENDEDOR
                            from t in ContextoDeObjs.TD_VENDEDOR
                            where v.ID_VENDEDOR == t.ID_VENDEDOR && v.ID_UBIC_VEND_CAB == id && v.ANIO == anio
                            group v by new { v.ID_VENDEDOR, v.NroRuedas, t.NOMBRE, t.APELLIDO } into g
                            select new
                            {
                                id_vendedor = g.Key.ID_VENDEDOR,
                                nom_vendedor = g.Key.NOMBRE + g.Key.APELLIDO,
                                nro_ruedas = g.Key.NroRuedas,

                                Ene = g.Where(d => d.MES == "01").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Feb = g.Where(d => d.MES == "02").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Mar = g.Where(d => d.MES == "03").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Abr = g.Where(d => d.MES == "04").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                May = g.Where(d => d.MES == "05").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Jun = g.Where(d => d.MES == "06").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Jul = g.Where(d => d.MES == "07").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Ago = g.Where(d => d.MES == "08").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Sep = g.Where(d => d.MES == "09").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Oct = g.Where(d => d.MES == "10").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Nov = g.Where(d => d.MES == "11").Sum(d => (Decimal?)d.IMP_META) ?? 0,
                                Dic = g.Where(d => d.MES == "12").Sum(d => (Decimal?)d.IMP_META) ?? 0
                            };
                    list = q.ToList();
                    Globales.countRegistros = list.Count();
                }
                else {
                    var q = from v in ContextoDeObjs.T_VEN_METAS_VENDEDOR
                            from t in ContextoDeObjs.TD_VENDEDOR
                            where v.ID_VENDEDOR == t.ID_VENDEDOR && v.ID_UBIC_VEND_CAB == id && v.ANIO == anio
                            group v by new { v.ID_VENDEDOR, v.NroRuedas, t.NOMBRE, t.APELLIDO } into g
                            select new
                            {
                                id_vendedor = g.Key.ID_VENDEDOR,
                                nom_vendedor = g.Key.NOMBRE + g.Key.APELLIDO,
                                nro_ruedas = g.Key.NroRuedas,

                                Ene = g.Where(d => d.MES == "01").Sum(d => (Int32?)d.CANT) ?? 0,
                                Feb = g.Where(d => d.MES == "02").Sum(d => (Int32?)d.CANT) ?? 0,
                                Mar = g.Where(d => d.MES == "03").Sum(d => (Int32?)d.CANT) ?? 0,
                                Abr = g.Where(d => d.MES == "04").Sum(d => (Int32?)d.CANT) ?? 0,
                                May = g.Where(d => d.MES == "05").Sum(d => (Int32?)d.CANT) ?? 0,
                                Jun = g.Where(d => d.MES == "06").Sum(d => (Int32?)d.CANT) ?? 0,
                                Jul = g.Where(d => d.MES == "07").Sum(d => (Int32?)d.CANT) ?? 0,
                                Ago = g.Where(d => d.MES == "08").Sum(d => (Int32?)d.CANT) ?? 0,
                                Sep = g.Where(d => d.MES == "09").Sum(d => (Int32?)d.CANT) ?? 0,
                                Oct = g.Where(d => d.MES == "10").Sum(d => (Int32?)d.CANT) ?? 0,
                                Nov = g.Where(d => d.MES == "11").Sum(d => (Int32?)d.CANT) ?? 0,
                                Dic = g.Where(d => d.MES == "12").Sum(d => (Int32?)d.CANT) ?? 0
                            };
                    list = q.ToList();
                    Globales.countRegistros = list.Count();
                
                }
            return list;
        }




        public IEnumerable<Object> listarVendedor(int idCabVen) {

            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from v in ContextoDeObjs.T_VEN_METAS_VENDEDOR
                        from ven in ContextoDeObjs.TD_VENDEDOR
                        where v.ID_VENDEDOR == ven.ID_VENDEDOR && v.ID_UBIC_VEND_CAB == idCabVen
                        select new
                        {
                            v.ID_UBIC_VEND_CAB,
                            v.ID_VENDEDOR,
                            v.MES,
                            NRORUEDAS = v.NroRuedas,
                            v.CANT,
                            v.ANIO,
                            v.ID_GRUPO_ARTICULO,
                            NOM_VENDEDOR = ven.NOMBRE + " " + ven.APELLIDO
                        };

                lista = q.ToList();


            }
            catch (Exception)
            {
                
            }

            return lista;
        
        
        }


        public List<Globales.lista_Metas_Vendedor> filtrolistarVendedor(int idCabVen)
        {

            List<Globales.lista_Metas_Vendedor> lista = new List<Globales.lista_Metas_Vendedor>();
            try
            {
                var q = from v in ContextoDeObjs.T_VEN_METAS_VENDEDOR
                        from ven in ContextoDeObjs.TD_VENDEDOR
                        where v.ID_VENDEDOR == ven.ID_VENDEDOR && v.ID_UBIC_VEND_CAB == idCabVen
                        select new 
                        {
                            ID_UBIC_VEND_CAB=v.ID_UBIC_VEND_CAB,
                            ID_VENDEDOR=v.ID_VENDEDOR,
                            MES=v.MES,
                            NRORUEDAS=v.NroRuedas,
                            CANT=v.CANT,
                            ANIO=v.ANIO,
                            ID_GRUPO_ARTICULO=v.ID_GRUPO_ARTICULO,
                            NOM_VENDEDOR=ven.NOMBRE + " " + ven.APELLIDO
                            
                        };

                Globales.lista_Metas_Vendedor item = new Globales.lista_Metas_Vendedor();
                foreach (var s in q)
                {
                    item.ANIO = s.ANIO;
                    item.CANT = s.CANT;
                    item.ID_GRUPO_ARTICULO = s.ID_GRUPO_ARTICULO;
                    item.ID_UBIC_VEND_CAB = s.ID_UBIC_VEND_CAB;
                    item.ID_VENDEDOR = s.ID_VENDEDOR;
                    item.MES = s.MES;
                    item.NOM_VENDEDOR = s.NOM_VENDEDOR;
                    item.NRORUEDAS = s.NRORUEDAS;
                    lista.Add(item);
                }
                //lista = q.ToList();


            }
            catch 
            {
            }

            return lista;


        }

        public List<VW_VEN_METAS_GRUPO_ARTICULO> listaGrupoArticulos()
        {
            List<VW_VEN_METAS_GRUPO_ARTICULO> lista = new List<VW_VEN_METAS_GRUPO_ARTICULO>();
            try
            {
                var q = from v in ContextoDeObjs.VW_VEN_METAS_GRUPO_ARTICULO
                        select v;
                lista = q.ToList();
            }
            catch 
            {
                
                
            }

            return lista;
        }
        public List<Globales.lista_Metas_Vendedor> filtroAnioMes(int idCabVen,string anio,string mes)
        {
            List<Globales.lista_Metas_Vendedor> lista = new List<Globales.lista_Metas_Vendedor>();
            
                var q = from v in ContextoDeObjs.T_VEN_METAS_VENDEDOR
                        join m in ContextoDeObjs.T_MAE_MONEDA on v.ID_MONEDA equals m.ID_MONEDA into mG
                        from ven in ContextoDeObjs.TD_VENDEDOR
                        from gr in ContextoDeObjs.TD_GRUPO_ARTICULO
                        where v.ID_VENDEDOR == ven.ID_VENDEDOR && v.ID_GRUPO_ARTICULO == gr.ID_GRUPO_ARTICULO && v.ID_UBIC_VEND_CAB==idCabVen && v.ANIO == anio && v.MES == mes
                        from m in mG.DefaultIfEmpty()
                        select new
                        {
                            ID_UBIC_VEND_CAB = v.ID_UBIC_VEND_CAB,
                            ID_VENDEDOR = v.ID_VENDEDOR,
                            MES = v.MES,
                            NRORUEDAS = v.NroRuedas,
                            CANT = v.CANT,
                            ANIO = v.ANIO,
                            IMPORTE=v.IMP_META,
                            ID_GRUPO_ARTICULO = v.ID_GRUPO_ARTICULO,
                            NOM_VENDEDOR = ven.NOMBRE + " " + ven.APELLIDO,
                            NOM_ID_GRUPO_ARTICULO = gr.DES_GRUPO_ARTICULO,
                            MONEDA=m.NOM_MONEDA,
                            ID_MONEDA=v.ID_MONEDA

                        };

                Globales.lista_Metas_Vendedor item = new Globales.lista_Metas_Vendedor();
                foreach (var s in q)
                {
                    item.ANIO = s.ANIO;
                    item.CANT = s.CANT;
                    item.ID_GRUPO_ARTICULO = s.ID_GRUPO_ARTICULO;
                    item.ID_UBIC_VEND_CAB = s.ID_UBIC_VEND_CAB;
                    item.ID_VENDEDOR = s.ID_VENDEDOR;
                    item.MES = s.MES;
                    item.NOM_VENDEDOR = s.NOM_VENDEDOR;
                    item.NRORUEDAS = s.NRORUEDAS;
                    item.IMP_META = Convert.ToInt32(s.IMPORTE);
                    item.NOM_ID_GRUPO_ARTICULO = s.NOM_ID_GRUPO_ARTICULO;
                    item.MONEDA = s.MONEDA;
                    item.ID_MONEDA = s.ID_MONEDA;
                    lista.Add(item);
                }

            return lista;
        }

        public bool Modificar(int id_ubic_cab,int id_vendedor,string anio,string mes,int id_grupo_articulo,int cant)
        {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand(String.Format("UPDATE T_VEN_METAS_VENDEDOR SET CANT={0} WHERE ID_UBIC_VEND_CAB={1} and ID_VENDEDOR={2} AND ANIO= {3} AND MES={4} AND ID_GRUPO_ARTICULO={5}", cant, id_ubic_cab, id_vendedor, anio, mes, id_grupo_articulo));
                return true;
            }
            catch 
            {
                return false;
            }
                      
        }

        public bool ModificarIMP(int id_ubic_cab, int id_vendedor, string anio, string mes, int id_grupo_articulo, decimal Imp_meta)
        {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand(String.Format("UPDATE T_VEN_METAS_VENDEDOR SET IMP_META={0} WHERE ID_UBIC_VEND_CAB={1} and ID_VENDEDOR={2} AND ANIO= {3} AND MES={4} AND ID_GRUPO_ARTICULO={5}", Imp_meta, id_ubic_cab, id_vendedor, anio, mes, id_grupo_articulo));
                return true;
            }
            catch
            {
                return false;
            }

        }

        public bool ModificarCantidad(int id_ubic_cab, int cant)
        {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand(String.Format("UPDATE T_VEN_METAS_VENDEDOR SET CANT={0} WHERE ID_UBIC_VEND_CAB={1}", id_ubic_cab,cant ));
                return true;
            }
            catch
            {
                return false;
            }




        }









        public bool ModicarVen(T_VEN_METAS_VENDEDOR obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("T_VEN_METAS_VENDEDOR", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
                return true;

            }
            catch (Exception)
            {
                return false;

            }

        }




        public bool Insertar(T_VEN_METAS_VENDEDOR Obj)
        {            
            ContextoDeObjs.AddObject("T_VEN_METAS_VENDEDOR", Obj);
            ContextoDeObjs.SaveChanges();            
            return true;
        }





        public int BusquedaRegistroExistentes(int ID_UBIC_VEND_CAB,int ID_VENDEDOR,string ANIO,string MES,int ID_GRUPO_ARTICULO) {
      int cont = 0;

            try
            {

               

                var q = from c in ContextoDeObjs.T_VEN_METAS_VENDEDOR
                        where c.ID_UBIC_VEND_CAB == ID_UBIC_VEND_CAB && c.ID_VENDEDOR == ID_VENDEDOR && c.ANIO == ANIO && c.MES == MES && c.ID_GRUPO_ARTICULO == ID_GRUPO_ARTICULO
                        select c;

                cont= q.Count();


            }
            catch{}

            return cont;

        }





        public bool Eliminar(T_VEN_METAS_VENDEDOR Obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("T_VEN_METAS_VENDEDOR", Obj);
                ContextoDeObjs.DeleteObject(Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch
            {
                return false;
            }
            return true;
        }






        public bool InsertaReplicacion(int ID_UBIC_VEND_CAB, int ID_VENDEDOR,int ID_GRUPO_ARTICULO,string ANIO,string MES,string NroRuedas,int  CANT,int? IMP_META, int? ID_MONEDA) {
               ContextoDeObjs.ExecuteStoreCommand("EXEC USP_GUARDAR_T_VEN_METAS_VENDEDOR @ID_UBIC_VEND_CAB={0},@ID_VENDEDOR={1},@ID_GRUPO_ARTICULO={2},@ANIO={3},@MES={4},@NRORUEDAS={5},@CANT={6},@IMP_META={7},@ID_MONEDA={8}", ID_UBIC_VEND_CAB, ID_VENDEDOR, ID_GRUPO_ARTICULO, ANIO, MES, NroRuedas, CANT, IMP_META, ID_MONEDA);
                return true;
            
        }

    }
}
